package com.linkai.JUC._14_jmm;

import java.util.concurrent.TimeUnit;

/**
 * @Description: volatile 关键字使用（保证可见性）
 *              参考：https://www.cnblogs.com/dolphin0520/p/3920373.html
 *              JVM学习笔记.md 里面关于 JMM 的部分
 * @Author: 林凯
 * @Date: 2021/10/25 21:12
 */
public class JMMDemo01 {
    // 不加 volatile 的话，不能保证可见性，线程1不知道 main 线程修改了 num 的值，会一直死循环下去
//    private static int num = 0;

    // 加了 volatile之后，main线程对num的修改，其他线程也是可见的
    private static volatile int num = 0;
    public static void main(String[] args) {    // main

        new Thread(()->{    // 线程1对主内存的变化不知道的（num不加volatile的话）
            while (num == 0) {
            }
        }, "线程1").start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        num = 1;
        System.out.println(num);
    }
}
